package fun.ticsmyc.question.stringQuestion;

import org.junit.Test;

/**
 * @author Ticsmyc
 * @package fun.ticsmyc.recursion
 * @date 2020-02-20 21:42
 */
public class 字符串子序列和全排列 {

    /**
     * 子序列 ：可以跳着取
     * @param arr
     * @param index
     * @param res
     */
    public void printAllZixulie(char[] arr , int index, String res){
        if(index == arr.length){
            System.out.println(res);
            return;
        }
        printAllZixulie(arr,index+1,res);
        printAllZixulie(arr,index+1,res+String.valueOf(arr[index]));
    }

    /**
     * 子串： 必须是连续的
     * @param str
     */
    public void printAllZichuan(String str){
        for(int i =0 ;i<=str.length() ;++i){
            for(int j=i+1;j<=str.length();++j){
                System.out.println(str.substring(i,j));
            }
        }
    }

    /**
     * 打印全排列
     * @param str
     */
    public void printAllPermutations(String str){
        char[] arr = str.toCharArray();
        printAllPermutation(arr,0);
    }
    public void printAllPermutation(char[] arr,int index){
        if(index ==arr.length){
            System.out.println(String.valueOf(arr));
            return;
        }

        for(int i=index;i<arr.length;++i){
            swap(arr, index , i);
            printAllPermutation(arr,index+1);
            swap(arr,index,i);
        }
    }

    public static void swap(char[]arr ,int i , int j){
        char temp = arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }


    @Test
    public void test(){
        String str ="abc";
        System.out.println("------子序列---------");
        printAllZixulie(str.toCharArray(),0,"");
        System.out.println("------子串---------");
        printAllZichuan(str);
        System.out.println("-------全排列--------");
        printAllPermutations(str);
        System.out.println("---------------");
    }

}
